package com.sz.biz.pay.account.service;

import com.sz.biz.pay.account.dto.PayAccountDto;
import com.sz.biz.pay.account.dto.PaySystemAccountDto;
import com.sz.biz.pay.account.entity.Account;
import com.sz.common.base.dto.QResultDto;
import com.sz.common.base.dto.QueryParams;

import java.util.List;

/**
 * Function: Account Service <br>
 * Author: siqishangshu <br>
 * Date: 2017-11-02 15:40:00
 */
public interface AccountService {

    /**
     * 新增记录，返回id
     *
     * @param entry
     * @return id
     */
    int insert(Account entry);

    /**
     * 通过id 删除
     *
     * @param id
     * @return
     */
    int delete(String id);

    /**
     * 多id 删除多条记录
     *
     * @param ids
     * @return
     */
    int delete(List ids);

    /**
     * id 更新记录
     *
     * @param entry
     * @return boolean
     */
    int update(Account entry);

    /**
     * id 查找
     *
     * @param id
     * @return list
     */
    Account select(String id);

    /**
     * 多id 查找
     *
     * @param ids
     * @return list
     */
    List<Account> selectList(List ids);

    /**
     * 查询所有记录
     *
     * @return list
     */
    List<Account> selectAll();

    /**
     * 搜索条件查找
     *
     * @param param
     * @return QResultDto
     */
    QResultDto selectList(QueryParams param);

    /**
     * 搜索条件查找结果统计
     *
     * @param param
     * @return int
     */
    int count(QueryParams param);

    /**
     * 全表数据统计
     *
     * @return int
     */
    int countAll();

    /**
     * 保存
     *
     * @param payAccount
     */
    void save(Account payAccount);

    /**
     * 设置密码
     *
     * @param password
     * @param repeatPassword
     * @param accountId
     */
    void resetPassword(String password, String repeatPassword, String accountId);

    /**
     * 设置密码
     *
     * @param password
     * @param accountId
     */
    void setPassword(String password, String accountId);

    /**
     * 通过customerId 和账户类型查询
     *
     * @param customerId
     * @param accountType
     * @return
     */
    Account findByCustomerId(int customerId, int accountType);

    Account findById(String accountId);

    /**
     * 是否需要设置密码  如果密码不存在则需要设置密码
     *
     * @param accountId
     * @return true or  false
     */
    boolean isNeedSetPassword(String accountId);

    List<Account> findByAccountType(int accountType);

    boolean checkOldPassword(String oldPassword, String accountId);

    QResultDto find(String q, boolean isAsc, int pageIndex, int pageSize, Integer userType, String thirdType, int accountType);

    List<PayAccountDto> findPayAccountDtoByIdAndThirdType(String accountId, String thirdType, int accountType);

    boolean checkAccountIsLocked(String accountId);

    /**
     * 运营系统 物流管理 余额管理 增加
     *
     * @param paySystemAccountDto
     * @param currentAccountId
     */
    void sysRecharge(PaySystemAccountDto paySystemAccountDto, String currentAccountId);

    /**
     * 根据id查询账户
     *
     * @param id 账户id
     * @return
     */
    Account findAccountById(String id);

    /**
     * 根据客户id查询账户
     * @param customerId
     * @return
     */
    Account findAccountByCustomerId(int customerId);

}
